package com.wb.core10异常.作业;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author 黄衡熙
 * @version 1.0
 */
/*
*  定义一个用户类User,拥有以下属性:id、username、password、phone、address
*  通过控制台输入的方式实现以下方法,数据存储到集合中
*  根据以下说明,所有不符合要求的场景都设计成自定义异常
*  所有异常在方法中声明抛出,在菜单中捕获处理
*  1.注册,注册时用户名不能重复,注册时密码需要输入两次,两次的密码必须一致
*  2.登录,根据用户名与密码进行登录,登录的用户必须是注册过的用户
* 登录成功返回:欢迎您:xxx用户
* 3.修改密码,控制台输入一个需要修改密码的用户名,修改指定用户的密码
 *  修改密码时指定的用户必须存在
 *  修改密码时需要输入原密码,只有原密码正确才能修改
 *  修改密码时输入的两次新密码必须一致*/
public class Test {
    private static Scanner sc = new Scanner(System.in);
    private static List<User> users = new ArrayList<>();
    public static void main(String[] args) {
        showMenu();
    }
    public static void showMenu() {
        System.out.println("***********************欢迎使用用户管理系统***********************");
        System.out.print("请选择服务(1.注册 2.登录 3.修改密码 4退出):");
        int choice = sc.nextInt();
        switch (choice) {
            case 1:
                register();
                break;
            case 2:
                login();
                break;
            case 3:
                modifyPassword();
                break;
            case 4:
                System.out.println("提示:您已经退出,欢迎下次使用");
                break;
            default:
                System.out.println("错误:您输入的选项有误,请重新输入");
                showMenu();
        }
    }
    //注册
    public static void register(){
        System.out.print("请输入用户id:");
        int id = sc.nextInt();
        System.out.print("请输入用户名:");
        String username = sc.next();
        try {
            name(username);
        } catch (UserExistException e) {
            System.out.println("错误:对不起,用户名设置败,失败原因:" + e.getMessage()+"请重新注册");
            showMenu();
        }
        System.out.print("请输入密码:");
        String password1 = sc.next();
        System.out.print("请再次输入密码:");
        String password2 = sc.next();
        try{
            password(password1,password2);
        }catch (UserExistException e){
            System.out.println("错误:对不起,密码设置失败,失败原因:" + e.getMessage()+"请重新注册");
            showMenu();
        }
        System.out.print("请输入手机号：");
        String phone = sc.next();
        System.out.print("请输入地址：");
        String address = sc.next();
        User user = new User(id,username, password1, phone, address);
        users.add(user);
        System.out.println("恭喜您:用户注册成功!");
        showMenu();
    }
    //登录
    public static void login(){
            System.out.print("请输入用户名: ");
            String username = sc.next();
            try {
                name1(username);
            } catch (UserNotExistException e) {
                System.out.println("错误: " + e.getMessage() + "，请重试！");
                login();
            }
        System.out.print("请输入密码:");
        String password = sc.next();
        try {
            login2(username,password);
        } catch (UserNotExistException e) {
            System.out.println("错误:"+e.getMessage()+"请重新登录");
            login();
        }
        System.out.println("登陆成功，欢迎您"+username);
        showMenu();
    }
   // 修改密码
    public static void modifyPassword(){
        System.out.print("请输入要修改的用户名:");
        String username = sc.next();
        try {
            name1(username);
        } catch (UserNotExistException e) {
            System.out.println("错误: " + e.getMessage() + "，请重试！");
            modifyPassword();
        }
        System.out.print("请输入原密码:");
        String password = sc.next();
        try {
            login2(username,password);
        } catch (UserNotExistException e) {
            System.out.println("错误:"+e.getMessage()+"请重新修改");
            modifyPassword();
        }
        System.out.print("请输入新密码:");
        String password1 = sc.next();
        System.out.print("请再次输入密码:");
        String password2 = sc.next();
        try{
            password(password1,password2);
        }catch (UserExistException e){
            System.out.println("错误:对不起,密码设置失败,失败原因:" + e.getMessage()+"请重新修改");
            modifyPassword();
        }
        for (User user : users) {
            if (user.getUsername().equals(username)) {
                user.setPassword(password1);
                System.out.println("密码修改成功！");
                break;
            }
        }
        showMenu();
    }
    public static void name(String username) throws UserExistException {
        for (User user : users) {
            if (user.getUsername().equals(username)) {
                throw new UserExistException("用户名" + username + "已存在");
            }
        }
    }
    public static void name1(String username) throws UserNotExistException {
        boolean userExists = false;
        for (User user : users) {
            if (user != null && username.equals(user.getUsername())) {
                userExists = true;
                break;
            }
        }
        if (!userExists) {
            throw new UserNotExistException("用户名 " + username + " 不存在");
        }
    }
    public static void login2(String username, String password) throws UserNotExistException {
        for (User user : users) {
            if (user.getUsername().equals(username)) {
                if (user.getPassword().equals(password)) {
                } else {
                    throw new UserNotExistException("密码错误");
                }
            }
        }
    }

    public static void password(String password,String password1) throws UserExistException {
        if (!password.equals(password1)) {
            throw new UserExistException("两次输入的密码不一致");
        }
    }
}
